package org.zsk.fastdev.assign;

import java.util.Collections;
import java.util.Map;

/**
 * 赋值工具接口
 * @author zsk
 * @version 1.0
 * Create on 2019/12/22
 */
public interface Assign {

    /**
     * 赋值方法
     *
     * @param assignBean   赋值类实例
     * @param assignedBean 被赋值类实例
     */
    void assign(Object assignBean, Object assignedBean) throws Exception;

    /**
     * 限制参数的赋值方法
     * @param assignBean 赋值类实例
     * @param assignedBean 被赋值类实例
     * @param usedFieldName 包含的赋值参数名称,用逗号分割,参数名称前加符号“$”表示必须有非空值
     *                         ,例子（“$username,$password,sex")
     */
    default void assign(Object assignBean, Object assignedBean, String usedFieldName)throws Exception{

    };

    /**
     * 限制参数的赋值方法
     * @param assignBean 赋值类实例
     * @param assignedBean 被赋值类实例
     * @param includeFieldName 必须包含的赋值参数名称,用逗号分割
     */
    default void assignWithInclude(Object assignBean, Object assignedBean, String includeFieldName)throws Exception{

    };

    /**
     * 限制参数的赋值方法
     * @param assignBean 赋值类实例
     * @param assignedBean 被赋值类实例
     * @param excludeFieldName 排除的赋值参数名称,用逗号分割
     */
    default void assignWithExclude(Object assignBean, Object assignedBean, String excludeFieldName)throws Exception{

    };

    /**
     * 限制参数的赋值方法
     * @param assignBean 赋值类实例
     * @param assignedBean 被赋值类实例
     * @param includeFieldName 必须包含的赋值参数名称,用逗号分割
     * @param excludeFieldName 排除的赋值参数名称,用逗号分割
     */
    default void assignWithIncludeAndExclude(Object assignBean, Object assignedBean, String includeFieldName, String excludeFieldName)throws Exception{

    };

    /**
     * 实体转换Map方法
     * @param entity 实体实例
     * @param includeFieldName 必须包含的赋值参数名称,用逗号分割
     * @param excludeFieldName 排除的赋值参数名称,用逗号分割
     * @return 符合条件的Map实例
     */
    default Map<String,Object> buildMapByEntityWithIncludeAndExclude(Object entity, String includeFieldName, String excludeFieldName){
        return Collections.emptyMap();
    };
}
